# -*- coding: utf-8 -*-
# filename: receive.py
import xml.etree.ElementTree as ET
from basic import Basic
from reply import TextMsg as ReplyMSG
import web

def parse_xml(web_data):
    if len(web_data) == 0:
        return None
    xmlData = ET.fromstring(web_data)
    msg_type = xmlData.find('MsgType').text
    if msg_type == 'event':
        event_type = xmlData.find('Event').text
        if event_type == 'CLICK':
            return Click(xmlData)
        #elif event_type in ('subscribe', 'unsubscribe'):
            #return Subscribe(xmlData)
        #elif event_type == 'VIEW':
            #return View(xmlData)
        #elif event_type == 'LOCATION':
            #return LocationEvent(xmlData)
        #elif event_type == 'SCAN':
            #return Scan(xmlData)
    elif msg_type == 'text':
        return TextMsg(xmlData)
    elif msg_type == 'image':
        return ImageMsg(xmlData)

class Msg(object):
    def __init__(self, xmlData):
        self.ToUserName = xmlData.find('ToUserName').text
        self.FromUserName = xmlData.find('FromUserName').text
        self.CreateTime = xmlData.find('CreateTime').text
        self.MsgType = xmlData.find('MsgType').text
        # self.MsgId = xmlData.find('MsgId').text

class TextMsg(Msg):
    """文本消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Content = xmlData.find('Content').text.encode("utf-8")

class ImageMsg(Msg):
    """图片消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.PicUrl  = xmlData.find('PicUrl').text
        self.MediaId = xmlData.find('MediaId').text
        self.MsgId   = xmlData.find('MsgId').text

class VoiceMSg(Msg):
    """语音消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Format  = xmlData.find('Format').text
        self.MediaId = xmlData.find('MediaId').text
        self.MsgID   = xmlData.find('MsgID').text
        self.Recognition = xmlData.find('Recognition').text  # 用户每次发送语音给公众号时，微信会在推送的语音消息XML数据包中，增加一个Recongnition字段

class VideoMSg(Msg):
    """视频消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.MediaId  = xmlData.find('MediaId').text
        self.ThumbMediaId = xmlData.find('ThumbMediaId').text
        self.MsgId   = xmlData.find('MsgId').text

class SmallVideoMsg(Msg):
    """小视频消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.MediaId  = xmlData.find('MediaId').text
        self.ThumbMediaId = xmlData.find('ThumbMediaId').text
        self.MsgId   = xmlData.find('MsgId').text

class PositionMsg(Msg):
    """地理位置消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Location_X = xmlData.find('Location_X').text
        self.Location_Y = xmlData.find('Location_Y').text
        self.Scale = xmlData.find('Scale').text
        self.Label = xmlData.find('Label').text
        self.MsgId = xmlData.find('MsgId').text

class SmallVideoMsg(Msg):
    """地理位置消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Title = xmlData.find('Title').text
        self.Description = xmlData.find('Description').text
        self.Url = xmlData.find('Url').text
        self.MsgId = xmlData.find('MsgId').text

class SmallVideoMsg(Msg):
    """关注/取消关注事件推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Event = xmlData.find('Event').text

class Click(Msg):
    def __init__(self, xmlData):
        EventMsg.__init__(self, xmlData)
        self.Event = xmlData.find('Event').text
        self.Eventkey = xmlData.find('EventKey').text

class ScanMSG(Msg):
    """扫描带参数二维码事件推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Event = xmlData.find('Event').text
        self.EventKey = xmlData.find('EventKey').text
        self.Ticket = xmlData.find('Ticket').text

class UserAttentionMSG(Msg):
    """用户已关注时的事件推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Event = xmlData.find('Event').text
        self.EventKey = xmlData.find('EventKey').text
        self.Ticket = xmlData.find('Ticket').text

class ReplyImageTextMSG(Msg):
    """回复图文消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.ArticleCount = xmlData.find('ArticleCount').text
        self.Articles = xmlData.find('Articles').text
        self.Title = xmlData.find('Title').text
        self.Description = xmlData.find('Description').text
        self.PicUrl = xmlData.find('PicUrl').text
        self.Url = xmlData.find('Url').text

class ReplyMusicMSG(Msg):
    """回复音乐消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Title = xmlData.find('Title').text
        self.Description = xmlData.find('Description').text
        self.MusicURL = xmlData.find('MusicURL').text
        self.HQMusicUrl = xmlData.find('HQMusicUrl').text
        self.ThumbMediaId = xmlData.find('ThumbMediaId').text

class ReplyVideoMSG(Msg):
    """回复视频消息推送XML数据包"""
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.MediaId = xmlData.find('MediaId').text
        self.Title = xmlData.find('Title').text
        self.Description = xmlData.find('Description').text

if __name__ == '__main__':
    fromUserName = 'mp-ishan'
    toUserName = 'c18189718713'
    content    = 'test'
    web_data   = ReplyMSG(toUserName,fromUserName,content).send()
    accessToken = Basic().get_access_token()
    x = parse_xml(web_data)
    print x
